package cdu.sl.mapper.specifications;

import cdu.sl.entity.Employee;
import jakarta.persistence.criteria.Predicate;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.jpa.domain.Specification;

import java.util.ArrayList;
import java.util.List;

@Slf4j
public class EmployeeSpecifications {

    /**
     * 基于职员名称和部门名称进行动态查询
     *
     * @param name    职员名称
     * @param depName 部门名称
     * @return 查询条件
     */
    public static Specification<Employee> withOptionalParams(String name, String depName) {

        return (root, query, cb) -> {
            List<Predicate> predicates = new ArrayList<>();
            if (name != null && !name.isEmpty()) {
                predicates.add(cb.like(root.get("name"), "%" + name + "%"));
            }
            if (depName != null && !depName.isEmpty()) {
                predicates.add(cb.like(root.get("depName"), "%" + depName + "%"));
            }

            if (predicates.isEmpty()) {
                // 创建一个逻辑上始终为“真”的条件 处理“无条件”的场景
                return cb.conjunction();
            }

            // 返回查询条件
            return cb.and(predicates.toArray(new Predicate[0]));
        };

    }

}
